// 生成公私钥对，并返回公钥给前端
app.get('/deeplink', (req, res) => {
  const dappKeyPair = nacl.box.keyPair();

  // 将公钥编码为 Base58 字符串
  const publicKey = bs58.encode(dappKeyPair.publicKey);
  
  // 返回公钥到前端，注意不要暴露私钥
  const data = {
    publicKey: publicKey,
  };
  
  res.json({ data: data });
});

// 解密接口
app.get('/decrypt', (req, res) => {
  const { data, nonce, publicKey, secretKey } = req.query;

  // 解密函数
  const decryptPayload = (data, nonce, sharedSecret) => {
    if (!sharedSecret) throw new Error("missing shared secret");
    
    // 尝试解密数据
    const decryptedData = nacl.box.open.after(bs58.decode(data), bs58.decode(nonce), sharedSecret);
    if (!decryptedData) {
      throw new Error("Unable to decrypt data");
    }
    
    return JSON.parse(Buffer.from(decryptedData).toString("utf8"));
  };

  // 解码 secretKey（确保 secretKey 是正确的格式）
  const secretKeyArray = JSON.parse(secretKey);
  const secretKeyBuffer = Buffer.from(Object.values(secretKeyArray));
  
  // 生成共享密钥
  const sharedSecretDapp = nacl.box.before(bs58.decode(publicKey), secretKeyBuffer);

  // 解密数据
  try {
    const decryptedData = decryptPayload(data, nonce, sharedSecretDapp);
    res.json({ data: { decryptedData } });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});



// const nacl = require('tweetnacl');
// const bs58 = require('bs58');
// const express = require('express');
// const app = express();

// // 服务器启动时生成密钥对
// const serverKeyPair = nacl.box.keyPair();

// // 将公钥以 Base58 编码形式提供
// const serverPublicKey = bs58.encode(serverKeyPair.publicKey);

// // 提供公钥的端点
// app.get('/getServerPublicKey', (req, res) => {
//   res.json({ serverPublicKey });
// });

// // 解密数据的端点
// app.post('/decryptData', express.json(), (req, res) => {
//   const { data, nonce, clientPublicKey } = req.body;

//   // 解码客户端公钥
//   const clientPublicKeyUint8Array = bs58.decode(clientPublicKey);

//   // 生成共享密钥
//   const sharedSecret = nacl.box.before(clientPublicKeyUint8Array, serverKeyPair.secretKey);

//   // 解码数据和随机数
//   const dataUint8Array = bs58.decode(data);
//   const nonceUint8Array = bs58.decode(nonce);

//   // 解密数据
//   const decryptedData = nacl.box.open.after(dataUint8Array, nonceUint8Array, sharedSecret);

//   if (!decryptedData) {
//     return res.status(500).json({ error: '解密失败' });
//   }

//   // 将解密后的数据转换为字符串
//   const decodedData = new TextDecoder().decode(decryptedData);

//   res.json({ data: decodedData });
// });

// // 启动服务器
// app.listen(3000, () => {
//   console.log('服务器已启动，监听端口 3000');
// });
